package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Usuario;

/**
 *
 * @author Jeisse
 */
public class UsuarioDao {
    private Connection con;
    private PreparedStatement comando;

    public static void main(String[] args) {
        Usuario u = new Usuario();
        u.setNome("teste");
        u.setEmail("teste");
        u.setSenha("teste");
        
        UsuarioDao ud = new UsuarioDao();
        ud.insere(u);
    }
    
    public Boolean verificaLogin(String email, String senha)
    {
        String sql = "SELECT * FROM usuario WHERE email = ? AND senha = ?";
        conectar(sql);
        ResultSet rs;
        Boolean retorno = false;
        try {

            comando.setString(1, email);
            comando.setString(2, senha);
            rs = comando.executeQuery();
            rs.next();
                       
            if(rs.getInt("id") != 0){
                retorno = true;
            }else{
                retorno = false;
            }
            
            rs.close();
            
        } catch (SQLException ex) {
            ex.printStackTrace();
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return retorno;
    }
    
    public Boolean insere(Usuario usuario){
           String sql = "INSERT INTO USUARIO(nome,email,senha) " +
               "VALUES(?,?,?)";
       //Cria a conexao e gera o comando.
       conectar(sql);
       try {
           comando.setString(1, usuario.getNome());
           comando.setString(2, usuario.getEmail());
           comando.setString(3, usuario.getSenha());

           comando.execute();

       } catch (SQLException ex) {
           Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
           return false;
       } finally {
           //fecha o comando e a conexao
          fechar();
          return true;
       }
    }

    public List<Usuario> getLista() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        conectar("select * from USUARIO");
        ResultSet rs;
        try {
            rs = comando.executeQuery();
            while (rs.next()) {
            	Usuario usuario = new Usuario();
            	usuario.setId(rs.getInt("id"));
            	usuario.setNome(rs.getString("nome"));
            	usuario.setEmail(rs.getString("email"));
            	usuario.setSenha(rs.getString("senha"));
            	usuarios.add(usuario);
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return usuarios;
    }

    public Usuario getUsuarioById(int id)
    {
        String sql = "SELECT * FROM usuario WHERE id = ?";
        Usuario usuario = new Usuario();
        conectar(sql);
        ResultSet rs;
        try {

            comando.setInt(1, id);
            rs = comando.executeQuery();
            rs.next();

            usuario.setId(rs.getInt("id"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return usuario;
    }

    public Usuario getPessoaByNome(String nome)
    {
        String sql = "SELECT * FROM usuario WHERE nome = ?";
        Usuario usuario = new Usuario();
        conectar(sql);
        ResultSet rs;
        try {

            comando.setString(1, nome);
            rs = comando.executeQuery();
            rs.next();
            
            usuario.setId(rs.getInt("id"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return usuario;
    }

    public void atualiza(Usuario usuario) {
        String sql = "UPDATE usuario SET nome=?, email=?, senha=?" +
                "WHERE id=?";
        conectar(sql);
        try {
            comando.setString(1, usuario.getNome());
            comando.setString(2, usuario.getEmail());
            comando.setString(3, usuario.getSenha());
            comando.setInt(4, usuario.getId());
            comando.execute();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
            throw new RuntimeException(ex);

        }
        finally{
            fechar();
        }
    }

    public void remove(Usuario usuario)
    {
        String sql = "DELETE FROM usuario WHERE id=?";
        conectar(sql);
        try {
            comando.setInt(1, usuario.getId());
            comando.execute();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }

    }

    private void conectar(String sql) {
        try {
            con = ConnectionFactory.getConnection();
            comando = con.prepareStatement(sql);
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void fechar() {
        try {
            comando.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }    

    public Usuario getUsuarioByEmail(String email) {
        String sql = "SELECT * FROM usuario WHERE email = ?";
        Usuario usuario = new Usuario();
        conectar(sql);
        ResultSet rs;
        try {

            comando.setString(1, email);
            rs = comando.executeQuery();
            rs.next();

            usuario.setId(rs.getInt("id"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return usuario;

    }
}
